/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.wisnu.scs.model;

import com.wisnu.scs.dao.DbBarangMasukDao;
import com.wisnu.scs.entity.DbBarang;
import com.wisnu.scs.entity.DbBarangMasuk;
import com.wisnu.scs.error.ErrorMessage;
import com.wisnu.scs.event.DbBarangMasukListener;
import com.wisnu.scs.util.HibernateUtil;
import java.util.Date;
import java.util.List;

/**
 *
 * @author Wisnu Wardoyo
 */
public class DbBarangMasukModel {

    private Integer idBarang;
    private String namaBarang;
    private Integer stock;
    private DbBarang barang;

    private Integer idPemasukan;
    private Date tanggalMasuk;
    private String sumberDana;
    private Integer jumlah;
    private String keterangan;

    private String searchText;
    private Date firstDate;
    private Date lastDate;
    private List<Date> listDate;

    private DbBarangMasukListener listener;

    public void setListener(DbBarangMasukListener listener) {
        this.listener = listener;
    }

    public DbBarang getBarang() {
        return barang;
    }

    public void setBarang(DbBarang barang) {
        this.barang = barang;
    }

    public Integer getIdPemasukan() {
        return idPemasukan;
    }

    public void setIdPemasukan(Integer idPemasukan) {
        this.idPemasukan = idPemasukan;
        fireOnReset(this);
    }

    public Integer getIdBarang() {
        return idBarang;
    }

    public void setIdBarang(Integer idBarang) {
        this.idBarang = idBarang;
        fireOnReset(this);
    }

    public String getNamaBarang() {
        return namaBarang;
    }

    public void setNamaBarang(String namaBarang) {
        this.namaBarang = namaBarang;
        fireOnReset(this);
    }

    public String getSumberDana() {
        return sumberDana;
    }

    public void setSumberDana(String sumberDana) {
        this.sumberDana = sumberDana;
        fireOnReset(this);
    }

    public Integer getJumlah() {
        return jumlah;
    }

    public void setJumlah(Integer jumlah) {
        this.jumlah = jumlah;
        fireOnReset(this);
    }

    public String getKeterangan() {
        return keterangan;
    }

    public void setKeterangan(String keterangan) {
        this.keterangan = keterangan;
        fireOnReset(this);
    }

    public String getSearchText() {
        return searchText;
    }

    public void setSearchText(String searchText) {
        this.searchText = searchText;
        fireOnReset(this);
    }

    public Date getFirstDate() {
        return firstDate;
    }

    public void setFirstDate(Date firstDate) {
        this.firstDate = firstDate;
        fireOnReset(this);
    }

    public Date getLastDate() {
        return lastDate;
    }

    public void setLastDate(Date lastDate) {
        this.lastDate = lastDate;
        fireOnReset(this);
    }

    public Date getTanggalMasuk() {
        return tanggalMasuk;
    }

    public void setTanggalMasuk(Date tanggalMasuk) {
        this.tanggalMasuk = tanggalMasuk;
        fireOnReset(this);
    }

    public List<Date> getListDate() {
        return listDate;
    }

    public void setListDate(List<Date> listDate) {
        this.listDate = listDate;
    }

    public Integer getStock() {
        return stock;
    }

    public void setStock(Integer stock) {
        this.stock = stock;
    }

    public void fireOnReset(DbBarangMasukModel model) {
        if (listener != null) {
            listener.onReset(model);
        }
    }

    public void fireOnInsert(DbBarangMasuk barangMasuk) {
        if (listener != null) {
            listener.onInsert(barangMasuk);
        }
    }

    public void fireOnDelete(DbBarangMasuk barangMasuk) {
        if (listener != null) {
            listener.onDelete(barangMasuk);
        }
    }

    public void fireOnUpdate(DbBarangMasuk barangMasuk) {
        if (listener != null) {
            listener.onUpdate(barangMasuk);
        }
    }

    public void fireOnSearch(List<DbBarangMasuk> barangMasuk) {
        if (listener != null) {
            listener.onSearch(barangMasuk);
        }
    }

    public void resetForm() {
        setFirstDate(new Date());
        setIdBarang(0);
        setIdPemasukan(0);
        setJumlah(0);
        setKeterangan("");
        setLastDate(new Date());
        setNamaBarang("");
        setSearchText("");
        setSumberDana("");
    }

    public void insertPemasukan() throws ErrorMessage {
        DbBarangMasukDao barangMasukDao = HibernateUtil.getBarangMasukDao();

        DbBarangMasuk barangMasuk = new DbBarangMasuk();
        barangMasuk.setDbBarang(barang);
        barangMasuk.setSumberDana(sumberDana);
        barangMasuk.setJumlah(jumlah);
        barangMasuk.setTanggalMasuk(tanggalMasuk);
        barangMasuk.setKeterangan(keterangan);

        barangMasukDao.insertBarangMasuk(barangMasuk, barang);
        fireOnInsert(barangMasuk);
    }

    public void updatePemasukan() throws ErrorMessage {
        DbBarangMasukDao barangMasukDao = HibernateUtil.getBarangMasukDao();

        DbBarangMasuk barangMasuk = new DbBarangMasuk();
        barangMasuk.setIdMasuk(idPemasukan);
        barangMasuk.setDbBarang(barang);
        barangMasuk.setJumlah(jumlah);
        barangMasuk.setKeterangan(keterangan);
        barangMasuk.setSumberDana(sumberDana);
        barangMasuk.setTanggalMasuk(tanggalMasuk);

        barangMasukDao.updateBarangMasuk(barangMasuk, barang);
        fireOnUpdate(barangMasuk);
    }

    public void deletePemasukan() throws ErrorMessage {
        DbBarangMasukDao barangMasukDao = HibernateUtil.getBarangMasukDao();

        DbBarangMasuk barangMasuk = new DbBarangMasuk();
        barangMasuk.setIdMasuk(idPemasukan);
        barangMasuk.setDbBarang(barang);
        barangMasuk.setJumlah(jumlah);
        barangMasuk.setKeterangan(keterangan);
        barangMasuk.setSumberDana(sumberDana);
        barangMasuk.setTanggalMasuk(tanggalMasuk);

        barangMasukDao.deleteBarangMasuk(barangMasuk, barang);
        fireOnDelete(barangMasuk);
    }

    public void searchBarangMasuk() throws ErrorMessage {
        DbBarangMasukDao barangMasukDao = HibernateUtil.getBarangMasukDao();
        fireOnSearch(barangMasukDao.selectBarangMasukByKeyWords(searchText));
    }

    public void searchBarangMasukByDate() throws ErrorMessage {
        DbBarangMasukDao barangMasukDao = HibernateUtil.getBarangMasukDao();
        fireOnSearch(barangMasukDao.selectBarangMasukByDate(searchText,firstDate));
    }

    public void searchBarangMasukByMonth() throws ErrorMessage {
        DbBarangMasukDao barangMasukDao = HibernateUtil.getBarangMasukDao();
        fireOnSearch(barangMasukDao.selectBarangMasukByDateRange(searchText,listDate));
    }

    public void searchBarangMasukByRange() throws ErrorMessage {
        DbBarangMasukDao barangMasukDao = HibernateUtil.getBarangMasukDao();
        fireOnSearch(barangMasukDao.selectBarangMasukByDateRange(searchText,listDate));
    }

}
